#include "GY_ComboxDelegate.h"
#include <QDebug>

GY_ComboxDelegate::GY_ComboxDelegate(QWidget *parent)
    : QStyledItemDelegate(parent)
{
}

/**
 * @brief setItems 设置文字
 * @param texts 所包含的文字
 */
void GY_ComboxDelegate::setItems(const QStringList &texts)
{
    m_comboxList = texts;
}

/**
 * @brief setIndexText 设置位置及文字
 * @param row 行
 * @param column 列
 * @param texts 文字
 */
void GY_ComboxDelegate::setIndexText(const int row, const int column, const QStringList &texts)
{
    if(texts.isEmpty())
    {
        return;
    }
    m_index.insert(row,column);
    m_indexText.insert(row,texts);
}

/**
 * @brief createEditor 创建下拉框控件
 * @param parent 父对象
 * @param option 位置
 * @param index 索引
 * @return
 */
QWidget *GY_ComboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(m_index.contains(index.row())) //如果设置了位置
    {
        QComboBox *pComBox = new QComboBox(parent);//创建编辑器控件，并设置父对象
        pComBox->addItems(m_indexText.value(index.row()));
        return pComBox;
    }
    else //如果没有设置位置
    {
        QComboBox *pComBox = new QComboBox(parent);//创建编辑器控件，并设置父对象
        pComBox->addItems(m_comboxList);
        return pComBox;
    }
}

/**
 * @brief setEditorData 编辑的时候设置数据到上面的editor中
 * @param editor 控件
 * @param index 索引
 */
void GY_ComboxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QString text = index.model()->data(index, Qt::EditRole).toString();
    QComboBox *pComboBox = static_cast<QComboBox*>(editor);
    int textIndex = pComboBox->findText(text);
    pComboBox->setCurrentIndex(textIndex);
}

/**
 * @brief setModelData 编辑完成，保存数据到data
 * @param editor 控件
 * @param model 模型
 * @param index 索引
 */
void GY_ComboxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    QComboBox* pCombox = static_cast<QComboBox*>(editor);
    model->setData(index,pCombox->currentText(),Qt::EditRole);
}

/**
 * @brief updateEditorGeometry 设置控件的位置和大小，样式等
 * @param editor 控件
 * @param option 位置
 * @param index 索引
 */
void GY_ComboxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    editor->setGeometry(option.rect);
}
